package com.jiyun.h2303b.service.impl;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.StorageClass;
import com.jiyun.h2303b.service.OssBucketService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class OssBucketServiceImpl implements OssBucketService {
    @Override
    public void createBucket(String bucketName) throws Exception{
        // yourEndpoint填写Bucket所在地域对应的Endpoint。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        DefaultCredentialProvider credentialsProvider = new DefaultCredentialProvider("LTAI5tJ4CoRYHZHk7gcTQiAD","RGcAFg7rcIyC78VEiUG90A6Hih04ga");
        // 填写Bucket名称。

        // 填写资源组ID。如果不填写资源组ID，则创建的Bucket属于默认资源组。
        //String rsId = "rg-aek27tc****";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        // 创建CreateBucketRequest对象。
        CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
        // 如果创建存储空间的同时需要指定存储类型、存储空间的读写权限、数据容灾类型, 请参考如下代码。
        // 此处以设置存储空间的存储类型为标准存储为例介绍。
//        createBucketRequest.setStorageClass(StorageClass.Standard);
        // 数据容灾类型默认为本地冗余存储，即DataRedundancyType.LRS。如果需要设置数据容灾类型为同城冗余存储，请设置为DataRedundancyType.ZRS。
        //createBucketRequest.setDataRedundancyType(DataRedundancyType.LRS);
        // 设置存储空间读写权限为公共读，默认为私有。
        //createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
        // 在支持资源组的地域创建Bucket时，您可以为Bucket配置资源组。
        //createBucketRequest.setResourceGroupId(rsId);
        // 创建存储空间。
        ossClient.createBucket(createBucketRequest);
        ossClient.shutdown();
    }

    @Override
    public void BucketList() throws Exception {
        // 以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

        // 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        DefaultCredentialProvider credentialsProvider = new DefaultCredentialProvider("LTAI5tJ4CoRYHZHk7gcTQiAD","RGcAFg7rcIyC78VEiUG90A6Hih04ga");

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        // 列举当前账号所有地域下的存储空间。
        List<Bucket> buckets = ossClient.listBuckets();
        for (Bucket bucket : buckets) {
            System.out.println(" - " + bucket.getName());
        }
        ossClient.shutdown();
    }

    @Override
    public void DeleteBucket(String bucketName) throws Exception{
        // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        DefaultCredentialProvider credentialsProvider = new DefaultCredentialProvider("LTAI5tJ4CoRYHZHk7gcTQiAD","RGcAFg7rcIyC78VEiUG90A6Hih04ga");
        // 填写Bucket名称，例如examplebucket。
        // String bucketName = "examplebucket";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        // 删除存储空间。
        ossClient.deleteBucket(bucketName);
        ossClient.shutdown();
    }

}
